/*\
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.quixada.adrs.model;

import br.ufc.quixada.adrs.util.UtilAdrs;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

/**
 *
 * @author fernando
 */
public class Produtor extends Perfil {

    public final static int SEM_ESTADO_CIVIL = 0;
    public final static int ESTADO_CIVIL_SOLTEIRO = 1;
    public final static int ESTADO_CIVIL_CASADO = 2;
    private String conjuge;
    private String conjugeCpf;
    private String pai;
    private String mae;
    private Adrs adrs;
    private List<Visita> visitas;
    private String DAP;
    private Double latitude;
    private Double longitude;
    private Integer estadoCivil;//0-sem estado civil 1-solteiro 2-casado
    private boolean novoProdutor = false;

    public boolean isNovoProdutor() {
        return novoProdutor;
    }

    public void setNovoProdutor(boolean novoProdutor) {
        this.novoProdutor = novoProdutor;
    }

    public Integer getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(Integer estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public Double getLatitude() {
        return latitude;
    }

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return longitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    public String getDAP() {
        return DAP;
    }

    public void setDAP(String DAP) {
        if (DAP != null && DAP.isEmpty()) {
            DAP = null;
        }
        this.DAP = DAP;
    }

    public String getConjuge() {
        return conjuge;
    }

    public void setConjuge(String conjuge) {
        this.conjuge = conjuge;
    }

    public String getConjugeCpf() {
        return conjugeCpf;
    }

    public String getConjugeCpfFormatado() {
        if (conjugeCpf != null && conjugeCpf.length() == 11) {
            return UtilAdrs.formataCPF(conjugeCpf);
        }
        return conjugeCpf;
    }

    public void setConjugeCpf(String conjugeCpf) {
        if (conjugeCpf != null && conjugeCpf.isEmpty()) {
            conjugeCpf = null;
        }
        if (conjugeCpf == null || conjugeCpf.length() != 14) {
            this.conjugeCpf = conjugeCpf;
        } else {
            this.conjugeCpf = UtilAdrs.desFormataCPF(conjugeCpf);
        }
    }

    public String getMae() {
        return mae;
    }

    public void setMae(String mae) {
        this.mae = mae;
    }

    public String getPai() {
        return pai;
    }

    public void setPai(String pai) {
        this.pai = pai;
    }

    public Adrs getAdrs() {
        return adrs;
    }

    public void setAdrs(Adrs adrs) {
        this.adrs = adrs;
    }

    public List<Visita> getVisitas() {
        return visitas;
    }

    public void setVisitas(List<Visita> visitas) {
        this.visitas = visitas;
    }

    public Visita getUltimaVisita() {
        Visita ultima = null;
        for (Visita vi : visitas) {
            if (ultima == null || vi.getData().after(ultima.getData())) {
                ultima = vi;
            }
        }
        return ultima;
    }

    public Visita getUltimaVisitaComQuantitativo() {
        Visita ultima = null;
        for (Visita vi : visitas) {
            if (ultima == null || vi.getData().after(ultima.getData()) && vi.getQuestionarioQuantitativo() != null) {
                ultima = vi;
            }
        }
        return ultima;
    }

    public Visita getUltimaVisitaComQuantitativo(Date ini, Date fim) {

        Visita ultima = null;
        for (Visita vi : visitas) {
            Date visi = vi.getData();
            if ((visi.before(fim) || visi.equals(fim)) && (visi.after(ini) || visi.equals(ini))) {
                if (ultima == null || vi.getData().after(ultima.getData()) && vi.getQuestionarioQuantitativo() != null) {
                    ultima = vi;
                }
            }
        }
        return ultima;
    }

    public List<Visita> getVisitasComQuantitativoDescarteNoMes(Date data) {

        Calendar dt = GregorianCalendar.getInstance();
        dt.setTime(data);
        //pega a posicação do meês,então temos que acrescentar um, 
        int mes = dt.get(Calendar.MONTH)+1;
        int ano = dt.get(Calendar.YEAR)+1;
        List<Visita> lisVisitas = new ArrayList<Visita>();
        for (Visita v : this.getVisitas()) {
            if (v.getQuestionarioQuantitativo() == null || v.getQuestionarioQuantitativo().getDescartes() == null) {
                continue;
            }
            Calendar cal = GregorianCalendar.getInstance();
            cal.setTime(v.getData());
            int mesVisi = cal.get(Calendar.MONTH) + 1;
            int anoVisi = cal.get(Calendar.YEAR)+1;
            if (mes == mesVisi && anoVisi==ano) {
                lisVisitas.add(v);
            }
        }
        return lisVisitas;
    }
}
